#ifndef DIFFIE_HELLMAN_H
#define DIFFIE_HELLMAN_H
#include <qstring.h>
#include <qmath.h>
#include <QTime>
#include <QtGlobal>
#include <cstdlib>
#include <iostream>
#define MAX_LENTH 1024//单次加密最大长度，字节数

class diffie_hellman
{
public:
    diffie_hellman();
    size_t g,p;
    int A;//客户端
    int B;//服务器
    int KA;
    int KB;
    int K;//公钥生成用
    int fain;//φ(n)
    size_t Pseudoprime();          //生成伪素数
    bool rabinmiller(size_t n, size_t k);//素性检测
    int BianaryTransform(int num, int bin_num[]);//二进制转换
    long long Modular_Exonentiation(long long a, int b, int n);//模重复平方算法
    int Exgcd(int m,int n,int &x);  //欧几里得扩展算法
    void DH_Initialize();//初始化，生成g,p,A
    size_t getyuangen(size_t p);//求原根
    void Initialize();//初始化，转化字符数组为整数数组，并debug输出
    int DH_Delay();
    int server_get_key();//服务器接受到A，生成B，并获得密钥K
    int client_get_key();//客户端接受到B并获得K
};

#endif // DIFFIE_HELLMAN_H
